﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sjt_console20200528
{
    class Program
    {
        static void Main(string[] args)
        {
            // ArrayList工具类
            //test01();

            // List工具类
            // test02();
            // dictionary工具类
            // Test03();
            // 商品排序，类和接口的使用
            //Test04();
            // 学生的比较
            Test05();
            // 暂停
            Console.Read();
        }

        /// <summary>
        /// 在一个List（也可以使用数组）集合中，存储了若干商品，使用商品满意度参数进行排序，并打印满意度最高的商品信息
        /// </summary>
        static void Test05()
        {
            // 创建一个集合
            List<Student> lstGoods = new List<Student>();
            // 添加商品到集合中
            lstGoods.Add(new Student("华为", 90));
            lstGoods.Add(new Student("苹果", 88));
            lstGoods.Add(new Student("小米", 95));

            // 根据商品的满意度进行排序（从高到低）
            lstGoods.Sort(); // Student实现了IComparable接口，所有不需要提交比较器了，Student自己能进行比较了，具有比较行为
            // 排序之后，输出满意度最高商品
            //Console.WriteLine("满意度最高的商品：{0}，满意度为：{1}",lstGoods[lstGoods.Count-1].GoodName,lstGoods[lstGoods.Count - 1].GoodGrade);
            Console.WriteLine("年龄最大的商品：{0}，满意度为：{1}", lstGoods[0].StuName, lstGoods[0].StuAge);

        }


        /// <summary>
        /// 在一个List（也可以使用数组）集合中，存储了若干商品，使用商品满意度参数进行排序，并打印满意度最高的商品信息
        /// </summary>
        static void Test04()
        {
            // 创建一个集合
            List<Good> lstGoods = new List<Good>();
            // 添加商品到集合中
            lstGoods.Add(new Good("华为手机",90));
            lstGoods.Add(new Good("苹果手机", 88));
            lstGoods.Add(new Good("小米手机", 95));

            // 根据商品的满意度进行排序（从高到低）
            lstGoods.Sort(new GoodComparer()); // 提供Good类的比较器
            // 排序之后，输出满意度最高商品
            //Console.WriteLine("满意度最高的商品：{0}，满意度为：{1}",lstGoods[lstGoods.Count-1].GoodName,lstGoods[lstGoods.Count - 1].GoodGrade);
            Console.WriteLine("满意度最高的商品：{0}，满意度为：{1}", lstGoods[0].GoodName, lstGoods[0].GoodGrade);

        }


        /// <summary>
        /// Dictionary工具类的使用
        /// </summary>
        static void Test03()
        {
            // 声明初始化
            Dictionary<String, int> dic0 = new Dictionary<string, int>();
            // 添加元素
            dic0.Add("张三",20);
            dic0.Add("李四",21);
            // 取出元素，通过key取出
            int age1 =  dic0["张三"];

            // 遍历
            // 获取dictionary中的key的集合的每一个的值
            foreach (String  strKey in dic0.Keys)
            {
                // 通过key获取dictionary中的value值
                Console.WriteLine("key-{0}:value-{1}",strKey,dic0[strKey]);
            }
        }

        /// <summary>
        /// arraylist工具类的使用
        /// </summary>
        static void test02()
        {
            // 声明初始化
            List<String> lst = new List<String>();   // 泛型具体化为String类型，具体化以后，只能存储具体化的类型
            // 添加元素
            lst.Add("张三");
            lst.Add("100");

            // 取出元素--和数组类似
            String obj = lst[0];
            int numVal = Int32.Parse(lst[1]) + 100; /// 因为没有泛型需要装箱和拆箱
            // 遍历元素
            foreach (String val in lst) // 使用Object类型进行接收
            {
                Console.WriteLine("   {0}", val);
            }
        }

        /// <summary>
        /// arraylist工具类的使用
        /// </summary>
        static void test01()
        {
            // 声明初始化
            ArrayList arrlist = new ArrayList();
            // 添加元素
            arrlist.Add("张三");
            arrlist.Add(100);

            // 取出元素--和数组类似
            Object obj = arrlist[0];
            int numVal = (int)arrlist[1] + 100; /// 因为没有泛型需要装箱和拆箱
            // 遍历元素
            foreach (Object val  in arrlist) // 使用Object类型进行接收
            {
                
                Console.WriteLine("   {0}",val);
            }
        }
    }
}
